package everyday;

/**
 * @author zhangmin
 * @create 2022-05-05 10:33
 * 剑指 Offer 44. 数字序列中某一位的数字
 * 数字以0123456789101112131415…的格式序列化到一个字符序列中。在这个序列中，第5位（从下标0开始计数）是5，第13位是1，第19位是4，等等。
 * 请写一个函数，求任意第n位对应的数字。
 *
 * 思路：
 * 先找出第n位是在几位数上，并且可以找到digit位数的开始数字start
 * ，然后再找第n位是哪个数字，最后找到n是这个数字的第几位
 */
public class findNthDigit_offer44 {
    public int findNthDigit(int n) {
        int digit=1;
        long start=1,count=9;
        while (n>count){
            n-=count;
            digit++;
            start*=10;
            count=start*digit*9;
        }
        long num=start+(n-1)/digit;
        return Long.toString(num).charAt((n-1)%digit)-'0';
    }
}
